#include <cstring>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <signal.h>
#include <cerrno>
#include "tcp_server.h"
 #include <fcntl.h>
#include "log.hpp"

void daemon()
{
    // 处理常见的信号
    signal(SIGHUP, SIG_IGN);
    signal(SIGINT, SIG_IGN);
    signal(SIGQUIT, SIG_IGN);
    signal(SIGPIPE, SIG_IGN);
    signal(SIGTSTP, SIG_IGN);
    signal(SIGTTIN, SIG_IGN);

    // 守护进程的主体代码
    pid_t pid;

    // 创建子进程
    pid = fork();

    // 如果是父进程，直接退出
    if (pid > 0)
        exit(0);

    // 子进程继续执行

    // 创建新的会话
    if (setsid() < 0)
    {
        logMessage(Fatal, "daemon error, code: %d, string: %s,", errno, strerror(errno));
        exit(SETSID_ERR);
    }

    // 重定向标准输入、输出、错误输出
    int fd = open("/dev/null",O_RDWR);
    dup2(fd,0);
    dup2(fd,1);
    dup2(fd,2);
    close(fd);
}